#include <stdio.h>
#include <omp.h>

// 计算单个数组的函数
void compute_array(float *node, int M) {
    for (int j = 0; j < M; j++) {
        node[j] = omp_get_thread_num(); // 用线程号填充数组，便于观察任务分配
    }
}

// 主函数，计算整个矩阵
void compute_matrix(float *array, int N, int M) {
    int i;
    #pragma omp parallel private(i)
    #pragma omp single
    {
        for (i = 0; i < N; i++) {
            #pragma omp task priority(i)
            compute_array(&array[i * M], M);
        }
    }
}

int main() {
    const int N = 5; // 5行
    const int M = 4; // 每行4个元素
    float matrix[N][M];
    
    printf("Starting computation with OpenMP tasks...\n");
    
    // 调用计算函数
    compute_matrix(&matrix[0][0], N, M);
    
    // 打印结果
    printf("\nResulting matrix:\n");
    for (int i = 0; i < N; i++) {
        printf("Row %d (priority %d): ", i, i);
        for (int j = 0; j < M; j++) {
            printf("%.1f ", matrix[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}